package com.zackeus.sipservice.constant;

import androidx.annotation.IntDef;

import org.pjsip.pjsua2.pjsip_inv_state;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * SIP 状态码
 * @name: SipStateCode
 * @author: zz
 * @date: 2022/10/10
 */
public final class SipStateCode {

    /* 会话首次创建时的状态。这个时候没有任何的发送和接收的消息 */
    public static final int SIP_NULL = pjsip_inv_state.PJSIP_INV_STATE_NULL;
    /* 正在呼出(第一次发送INVITE后的会话状态，但是在收到临时响应之前) */
    public static final int SIP_CALLING = pjsip_inv_state.PJSIP_INV_STATE_CALLING;
    /* 正在来电(第一次收到INVITE消息后的会话状态，但是在发出任何临时响应之前) */
    public static final int SIP_INCOMING = pjsip_inv_state.PJSIP_INV_STATE_INCOMING;
    /* 对方振铃(对话已经发送或接收来自INVITE请求的响应，有To tag时) */
    public static final int SIP_EARLY = pjsip_inv_state.PJSIP_INV_STATE_EARLY;
    /* 正在确认连接(发送或接收到2xx的最终响应) */
    public static final int SIP_CONNECTING = pjsip_inv_state.PJSIP_INV_STATE_CONNECTING;
    /* 已通话(收到或发送ACK请求后) */
    public static final int SIP_CONFIRMED = pjsip_inv_state.PJSIP_INV_STATE_CONFIRMED;
    /* 通话结束(会话断开连接，或者INVITE/BYE请求没有收到成功的最终响应) */
    public static final int SIP_DISCONNECTED = pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED;

    @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({SIP_NULL, SIP_CALLING, SIP_INCOMING, SIP_EARLY, SIP_CONNECTING, SIP_CONFIRMED,
            SIP_DISCONNECTED })
    public @interface Unit {}
}
